package xinyou.jh.net.test
{
	import xinyou.net.BaseStruct;
	
	
	/**
	 * 注释用//表示，注释之后不能有空格。发送的结构体暂时还不支持List，其他的可直接从*.h文件复制中复制。</br>
	 * 如果有条件，结构体的xml对象最好符合成员变量首字母小写，次单词大写的命名规则。
	 * 支持的类型全部在BaseStruct类下面
	 * tchar用char代替
	 * 数组和集合的区别就是数组的元素是基本数据类型，集合的元素可以有结构体
	 * @author 浩
	 * 
	 */	
	public class TestStruct extends BaseStruct
	{
		public function TestStruct()
		{
			super();
		}
		
		override protected function initReceiverHash():void
		{
			addReceiverHash([1,2],STRUCT1);//客户端接收命令和结构体
		}
		
		override protected function initSenderHash():void
		{
			addSenderHash([1,2],STRUCT4);//客户端发送命令和结构体
		}
		
		
		public var STRUCT1:XML =
			<struct>
				WORD face;
				BYTE head;
				DWORD id;
				BOOL sex;
				LONG id2;
				UINT bb;
				INT  aa;//长度
				SHORT c;
				CHAR nickName[4];//定长字符串
				CHAR city[WORD];//变长字符串，WORD代表长度类型
				CHAR2 nickName[4];//定长字符串，这种会先读取一个布尔值，如果为true才读取这个字符串，否则不读取
				CHAR2 city[WORD];//变长字符串，WORD代表长度类型，这种会先读取一个布尔值，如果为true才读取这个字符串，否则不读取
				STRUCT STRUCT0;//导入另一个结构体
				Array BYTE bags[4];//定长数组，byte代表数组内容类型，[4]代表长度
				Array BYTE bags2[WORD];//变长数组，byte代表元素类型，[WORD]代表长度类型
				LIST STRUCT3 teamList1[4];//定长集合，STRUCT3代表集合元素类型，[4]代表长度
				LIST STRUCT3 teamList2[WORD];//变长集合，STRUCT3代表集合元素类型，[WORD]代表长度类型
				LIST STRUCT3 teamList3[$aa];//变长集合，STRUCT3代表集合元素类型，[$aa]代表长度属性
				BYTEARRAY ddd[4];//不处理字节流，交给上层处理。特殊情况处理不了的用这个，[4]代表字节流长度
			</struct>;
		public var STRUCT0:XML =
			<struct>
				WORD face2;
			</struct>;
		public var STRUCT2:XML =
			<struct>
				WORD face2;
				CHAR nickName[4];//定长字符串
			</struct>;
		public var STRUCT3:XML =
			<struct>
				WORD t1;
				WORD t2;
			</struct>;
		
		
		public var STRUCT4:XML =
			<struct>
				WORD t1;
				WORD t2;
				STRUCT STRUCT2;//导入另一个结构体
				CHAR city[WORD];//变长字符串，WORD代表长度类型
				Array BYTE bags2[WORD];
				Array BYTE bags3[3];
			</struct>;
	}
}